button: Clear highlight when a button is removed from a container
authorSébastien Granjoux <seb.sfo@free.fr>
Sat, 26 May 2012 20:32:07 +0000 (22:32 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 17 Sep 2012 03:28:02 +0000 (23:28 -0400)
A button is highlighted if the private variable in_button is TRUE.
This variable is set when the pointer is over the button and cleared when
it left the button. When a button is hidden while there is the pointer over
it, GTK generates a leave notification event, in_button is set to FALSE.
But when a button is removed from a container but not destroyed, it is
unrealized and loose its window. It cannot receive the leave notification
event and in_button stay TRUE. So when the button get a new parent it is still
highlighted.

https://bugzilla.gnome.org/show_bug.cgi?id=676890

gtk/gtkbutton.c

index 621cd4f4ac445d90370c72a77eec54421504c9f5..824f4986e9a5d98e140c250796aaebdd6653f2a5 100644 (file)
@@ -1461,7 +1461,10 @@ gtk_button_unmap (GtkWidget *widget)
   GtkButtonPrivate *priv = button->priv;
 
   if (priv->event_window)
-    gdk_window_hide (priv->event_window);
+    {
+      gdk_window_hide (priv->event_window);
+      priv->in_button = FALSE;
+    }
 
   GTK_WIDGET_CLASS (gtk_button_parent_class)->unmap (widget);
 }